package com.jzxk.tool;

/**
 * @author 今朝惜客
 * @CreateTime : 16/9/18 上午10:18
 * @Description : 根据经纬度计算距离
 *
 * google地图提供的方法
 * A(lng1,lat1),B(lng2,lat2)
 * S=2*R*Math.asin(Math.sqrt( Math.pow(Math.sin(a/2),2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(b/2),2) ))
 * a=lat1-lat2(两点纬度之差);
 * b=lng1-lng2(两点经度之差);
 * R=6378.137(千米)
 */
public class DistanceUtils {

	private static final double EARTH_RADIUS=637813;

	/**
	 * 转换成弧度值
	 * @param tidude
	 * @return
	 */
	private static double rad(double tidude) {

		return tidude * Math.PI / 180.0;
	}

	/**
	 * 根据两点间经纬度坐标（double值），计算两点间距离，单位为米
	 * @param lng1
	 * @param lat1
	 * @param lng2
	 * @param lat2
	 * @return
	 */
	public static double getDistance(double lng1,double lat1,double lng2,double lat2){

		double radLat1=rad(lat1);
		double radLat2=rad(lat2);

		double a=radLat1-radLat2;
		double b=rad(lng1)-rad(lng2);

		double s=2*EARTH_RADIUS*Math.asin((Math.sqrt(Math.pow(Math.sin(a/2),2)+Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2))));

		return Math.round(s*10000)/10000;
	}
}
